#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int argc, char* argv[])
{
    //O_RDONLY  只读
    // O_WRONLY 写
    // O_RDONLY 读写
    // O_APPEND 追加
    // O_TRUNC  截断
    // 打开模式 可以使用按位或运算
    int fd = open(argv[1], O_RDONLY);
    //会使用目前未使用的文件描述符最小值 数据结构是一个数组
    printf("文件描述符：%d\n", fd);

    int fd2 = open(argv[2], O_WRONLY | O_TRUNC | O_CREAT);
    printf("文件描述符：%d\n", fd2);
    
    // lseek
    // fseek ftell  fseek与ftell搭配使用，偏移之后可以调用ftell获取现在所在的位置
    // 1 文件描述符
    // 2. 偏移量
    // 3.模式 SEEK_SET SEEK_END,SEEK_CUR
    // return 返回偏移量，打开文件默认为文件的开头
    // 获取文件长度
    // int len = lseek(fd, 0, SEEK_END);
    // printf("%d\n", len);

    // lseek(fd, 3, SEEK_SET);
    // char ch;
    // read(fd, &ch, 1);
    // printf("%c\n", ch);

    //一次一个字符
    char ch;
    // 失败返回-1 结束返回0 成功返回读到的size
    while(read(fd, &ch, 1) > 0)
    {
        write(fd2, &ch, 1);
    }
    printf("end\n");

    // 缓冲区
    // char buf[1024*8];
    // int size;
    // while((size = read(fd, buf, 8192) > 0))
    // {
    //     write(fd2, buf, size);
    // }
    // printf("end\n");

    // 关闭
    close(fd);
    close(fd2);
    return 0;
}